import { getToken } from '@/utils/auth'
import { gotoLogin, toast } from '@/utils/common'

// 黑名单
const needLogin = ['pages/publish/publish', '/pages/user/user']
// 路由方法
const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']

list.forEach((item) => {
  // 为每个路由方法添加拦截器
  uni.addInterceptor(item, {
    invoke(e) {
      // 获取用户的token
      const token = getToken()
      // 获取当前页面路径（即url去掉'?'和'?'后的参数）
      const url = e.url.split('?')[0]

      // 判断要打开的页面是否需要验证登录
      const isProtectedRoute = needLogin.some((protectedUrl) =>
        new RegExp(`^/${protectedUrl}`).test(url),
      )

      if (isProtectedRoute && (!token || token === '')) {
        gotoLogin()
        return false
      }

      // 使用正则表达式来匹配登录页面的路径
      const loginPagePattern = /\/pages\/login\/login/
      if (loginPagePattern.test(url) && token) {
        toast('您已登录')
        uni.switchTab({
          url: '/pages/index/index',
        })
        return false
      }

      return true
    },
    fail(err) {
      // 失败回调拦截
      console.log(err)
    },
  })
})
